package org.soderiakelvy.controller.util;

import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import javax.faces.bean.ManagedBean;

import org.soderiakelvy.model.domain.CondicionIvaVO;
import org.soderiakelvy.model.domain.FrioCalorVO;
import org.soderiakelvy.model.domain.PackVO;
import org.soderiakelvy.model.domain.PersonalVO;
import org.soderiakelvy.model.domain.ProductoVO;
import org.soderiakelvy.model.domain.RepartoVO;
import org.soderiakelvy.model.domain.RolVO;
import org.soderiakelvy.model.domain.SucursalVO;
import org.soderiakelvy.model.domain.TipoClienteVO;
import org.soderiakelvy.model.domain.TipoProductoVO;
import org.soderiakelvy.model.domain.VehiculoVO;
import org.soderiakelvy.model.service.LoginServicio;
import org.soderiakelvy.model.service.ProductoServicio;
import org.soderiakelvy.model.service.RepartoServicio;
import org.soderiakelvy.model.service.SucursalServicio;
import org.soderiakelvy.model.service.SujetoServicio;
import org.soderiakelvy.model.service.imp.LoginServicioImpl;
import org.soderiakelvy.model.service.imp.ProductoServicioImp;
import org.soderiakelvy.model.service.imp.RepartoServicioImp;
import org.soderiakelvy.model.service.imp.SucursalServicioImp;
import org.soderiakelvy.model.service.imp.SujetoServicioImpl;
import org.soderiakelvy.model.util.ConstantModel;


@ManagedBean
public class SelectOneMany {
	private static ProductoServicio productoServicio = new ProductoServicioImp();
	private static SujetoServicio sujetoServicio = new SujetoServicioImpl();
	private static RepartoServicio repartoServicio = new RepartoServicioImp();
	private static SucursalServicio sucursalServicio = new SucursalServicioImp();
	private static LoginServicio loginServicio = new  LoginServicioImpl();
	
	public static List<RepartoVO> getRepartos(){
		return repartoServicio.getRepartos();
	}
	
	public static List<TipoProductoVO> getAllTiposDeProductos() {		
		return productoServicio.getTiposDeProductos();
	}

	public static List<TipoClienteVO> tiposDeClientes(){
		return sujetoServicio.getAllTipoClienteVO();
	}

	public static List<ProductoVO> getAllProductos(){
		return productoServicio.getProductos();
	}
	
	public static List<ProductoVO> getAllProductosConPrecio(long tipoClienteId){
		
		List<ProductoVO> prod = productoServicio.getProductosConPrecio(tipoClienteId);
		
		return prod; 
	}
	
	public static List<PersonalVO> getAllPersonal(){
		return repartoServicio.getAllPersonal();
	}
	
	public static List<VehiculoVO> getAllVehiculo(){
		return repartoServicio.getAllVehiculo();
	}

	public static List<RolVO> getAllRoles(){
		return loginServicio.getAllRoles();
	}
	/**
	 *Genera un map con los dias de la semana 
	 * 
	 */
	private static Map<String,Object> diasSemanales;
	static{
		diasSemanales = new LinkedHashMap<String,Object>();
		diasSemanales.put("Lunes", "1"); //label, value
		diasSemanales.put("Martes", "2");
		diasSemanales.put("Miercoles", "3");
		diasSemanales.put("Jueves", "4");
		diasSemanales.put("Viernes", "5");
		diasSemanales.put("Sabado", "6");
	}
	
	/**
	 * Genera un map con las categorias de un personal
	 */
	private static Map<String, Object> categorias;
	static{
		categorias = new LinkedHashMap<String, Object>();
		categorias.put(ConstantModel.CATEGORIA_DE_PERSONAL.OPERARIO_INTERNO.getNombreCategoria(), ConstantModel.CATEGORIA_DE_PERSONAL.OPERARIO_INTERNO.getNombreCategoria());
		categorias.put(ConstantModel.CATEGORIA_DE_PERSONAL.AYUDANTE_ESPECIALIZADO.getNombreCategoria(), ConstantModel.CATEGORIA_DE_PERSONAL.AYUDANTE_ESPECIALIZADO.getNombreCategoria());
		categorias.put(ConstantModel.CATEGORIA_DE_PERSONAL.MEDIO_OFICIAL.getNombreCategoria(), ConstantModel.CATEGORIA_DE_PERSONAL.MEDIO_OFICIAL.getNombreCategoria());
		categorias.put(ConstantModel.CATEGORIA_DE_PERSONAL.OFICIAL.getNombreCategoria(), ConstantModel.CATEGORIA_DE_PERSONAL.OFICIAL.getNombreCategoria());
		categorias.put(ConstantModel.CATEGORIA_DE_PERSONAL.REPARTIDOR.getNombreCategoria(), ConstantModel.CATEGORIA_DE_PERSONAL.REPARTIDOR.getNombreCategoria());
		categorias.put(ConstantModel.CATEGORIA_DE_PERSONAL.AYUDANTE_DE_REPARTIDOR.getNombreCategoria(), ConstantModel.CATEGORIA_DE_PERSONAL.AYUDANTE_DE_REPARTIDOR.getNombreCategoria());
		categorias.put(ConstantModel.CATEGORIA_DE_PERSONAL.ADMINISTRATIVO.getNombreCategoria(), ConstantModel.CATEGORIA_DE_PERSONAL.ADMINISTRATIVO.getNombreCategoria());
		categorias.put(ConstantModel.CATEGORIA_DE_PERSONAL.GERENCIA.getNombreCategoria(), ConstantModel.CATEGORIA_DE_PERSONAL.GERENCIA.getNombreCategoria());
	}
	
	private static Map<String, Object> estadoFrioCalor;
	static{
		estadoFrioCalor = new LinkedHashMap<String, Object>();
		estadoFrioCalor.put("Fabrica", ConstantModel.ESTADO_FRIO_CALOR.FABRICA.getEstado());
		estadoFrioCalor.put("Cliente", ConstantModel.ESTADO_FRIO_CALOR.CLIENTE.getEstado());
	}
	
	public static List<PackVO> getPacks(){
		return productoServicio.getPacks();
	}
	
	public static List<FrioCalorVO> getAllFrioCalor(){
		return productoServicio.getEquiposFrioCalor();
	}
	
	public static List<FrioCalorVO> getAllFrioCalorDisponibles(){
		return productoServicio.getEquiposFrioCalorByTipoAndEstado(ConstantModel.FRIO_CALOR_NO_AGUA_DE_RED,ConstantModel.ESTADO_FRIO_CALOR.FABRICA.getEstado());
	}
	
	public static List<CondicionIvaVO> getAllCondicionIva(){
		return sujetoServicio.getAllCondicioIvaVO();
	}

	public static Map<String, Object> getDiasSemanales() {
		return diasSemanales;
	}
	
	public static List<SucursalVO> getSucursalesResidenciales(){
		List<SucursalVO> sucursales =  sucursalServicio.getSucursalesByTipoSujeto("RESIDENCIAL");
		for(int i = 0; i < sucursales.size(); ++i){
			SucursalVO sVO = new SucursalVO();
			sVO = sucursales.get(i);
			sucursales.set(i, sVO);
		}
		return sucursales;
	}

	public static Map<String, Object> getCategorias() {
		return categorias;
	}

	public static Map<String, Object> getEstadoFrioCalor() {
		return estadoFrioCalor;
	}
	
	
}
